/**
 * 函数合集
 * 使用库： jquery-3.7.1.min.js
 *          bootstrap.bundle.min.js     bootstrap.min.css
 *          purify.min.js 校验编辑框内html代码 
 * 
 * 操作规则：
 *   
 */

/**
 * 全局变量
 */

const lg = console.log
// 资源.导航规则 对于json网站：空或不写，导航数据项名为 class ，如果不是需要填写，如：导航规则:'classlist'
 var 资源=[//https://www.heimuer.tv/api.php/provide/vod
{
  name:"黑木耳",
  dec:"",
  type:"json",
  url:"https://www.heimuer.tv/api.php/provide/vod"
},{
    name:"非非资源",
    dec:"",
    type:"json",
    url:"https://cj.ffzyapi.com/api.php/provide/vod/"
 },{
    name:"天空资源",
    dec:"",
    type:"json",
    url:"https://m3u8.tiankongapi.com/api.php/provide/vod/"
 },{
    name:"1080资源",
    dec:"",
    type:"json",
    url:"https://api.1080zyku.com/inc/apijson.php"
 },{
    name:"好好资源",
    dec:"",
    type:"json",
    url:"https://hhzyapi.com/api.php/provide/vod/"
 },{
    name:"飞速资源",
    dec:"",
    type:"json",
    url:"https://www.feisuzyapi.com/api.php/provide/vod/"
 },{
    name:"新浪资源",
    dec:"",
    type:"json",
    url:"https://api.xinlangapi.com/xinlangapi.php/provide/vod/"
 },{
    name:"最大资源",
    dec:"",
    type:"json",
    url:"https://api.zuidapi.com/api.php/provide/vod/"
 },{
    name:"金色资源",
    dec:"",
    type:"json",
    url:"https://jszyapi.com/api.php/provide/vod/"
 },{
    name:"无尽资源",
    dec:"",
    type:"json",
    url:"https://api.wujinapi.me/api.php/provide/vod/"
 },{
    name:"红牛资源3",
    dec:"",
    type:"json",
    url:"https://www.hongniuzy3.com/api.php/provide/vod/"
 },{
    name:"海外吧资源",
    dec:"",
    type:"json",
    url:"https://hw8.live/api.php/provide/vod/"
 },{
    name:"光速资源",
    dec:"",
    type:"json",
    url:"https://api.guangsuapi.com/api.php/provide/vod/"
 },{
    name:"虎牙",
    dec:"",
    type:"json",
    url:"https://www.huyaapi.com/api.php/provide/vod/"
 },{
    name:"卧龙资源",
    dec:"",
    type:"json",
    url:"https://collect.wolongzyw.com/api.php/provide/vod/"
 },{
    name:"暴风资源",
    dec:"",
    type:"json",
    url:"https://bfzyapi.com/api.php/provide/vod/"
 },{
    name:"49资源",
    dec:"",
    type:"json",
    url:"https://49zyw.com/api.php/provide/vod/"
 },{
    name:"天空资源",
    dec:"",
    type:"json",
    url:"https://api.tiankongapi.com/api.php/provide/vod/"
 },{
    name:"约爱采集",
    dec:"",
    type:"json",
    url:"https://caiji.yueai55.cc:2277/yuelove.php/provide/vod/"
 },{
    name:"量子资源8",
    dec:"",
    type:"json",
    url:"https://lzizy8.com/api.php/provide/vod/"
 },{
    name:"42啦",
    dec:"",
    type:"json",
    url:"https://www.42.la/api.php/provide/vod/"
 },{
    name:"片吧影院",
    dec:"",
    type:"zhua",
    url:"https://www.pbgoo.com/",
    gz_daohang:".stui-header__menu li;a&&Text;a&&href"
 },{
  name:"七七影视",
  dec:"",
  type:"zhua",
  url:"http://www.qiaodangjia.cn/",
  gz_daohang:""
},{
  name:"大地影院",
  dec:"",
  type:"zhua",
  url:"http://www.zjqfjj.com/",
  gz_daohang:""
},{
  name:"全视频TV",
  dec:"",
  type:"zhua",
  url:"https://www.mhqzsp.com/",
  gz_daohang:""
},{
  name:"厂长资源",
  dec:"",
  type:"zhua",
  url:"https://czzy.top/",
  gz_daohang:""
},{
  name:"七七看片",
  dec:"",
  type:"zhua",
  url:"https://www.77kkpp.com/",
  gz_daohang:""
},{
  name:"520电影网",
  dec:"",
  type:"zhua",
  url:"https://www.haojubang.cn/",
  gz_daohang:""
},{
  name:"80S电影网",
  dec:"",
  type:"zhua",
  url:"http://xiepp.com/",
  gz_daohang:""
},{
  name:"骚火电影",
  dec:"",
  type:"zhua",
  url:"https://shdy2.com/",
  gz_daohang:""
},{
  name:"八戒采集",
  dec:"",
  type:"xml",
  url:"http://cj.bajiecaiji.com/inc/seacmsapi.php",
  gz_daohang:"",
  urlkey:[{ac:'list'},{ac:'videolist',t:'h_tid',pg:'h_page'},{ac:'videolist',ids:'h_id'}],
  //列表，id,pid,name
  导航规则:'class ty;&&id;&&pid;&&Text',
  展示规则:'list video;id;name;type;pic;des;last',
  搜索规则:'',
  播放规则:''
}
 ]
 //展示规则：it.vod_id, it.vod_name, it.vod_class, it.vod_pic, it.vod_content, it.vod_time,host
 //urlkey: "[{ac:list},{ac:'videolist',tid:'h_tid',pg:'h_page'},{ac:'videolist',ids:'h_id'}]"
//var ziyuan = ["https://cj.ffzyapi.com/api.php/provide/vod/", "https://api.1080zyku.com/inc/apijson.php", "https://m3u8.tiankongapi.com/api.php/provide/vod/", "https://hhzyapi.com/api.php/provide/vod/", "https://www.feisuzyapi.com/api.php/provide/vod/", "https://api.xinlangapi.com/xinlangapi.php/provide/vod/",  "https://api.zuidapi.com/api.php/provide/vod/", "https://jszyapi.com/api.php/provide/vod/", "https://api.wujinapi.me/api.php/provide/vod/",  "https://www.hongniuzy3.com/api.php/provide/vod/","https://hw8.live/api.php/provide/vod/", "https://api.guangsuapi.com/api.php/provide/vod/", "https://www.huyaapi.com/api.php/provide/vod/","https://collect.wolongzyw.com/api.php/provide/vod/", "https://bfzyapi.com/api.php/provide/vod/",   "https://49zyw.com/api.php/provide/vod/", "https://api.tiankongapi.com/api.php/provide/vod/", "https://caiji.yueai55.cc:2277/yuelove.php/provide/vod/", "https://lzizy8.com/api.php/provide/vod/", "https://www.42.la/api.php/provide/vod/"]
   /**
 * thisurl  当前访问的资源站网址
 */
var thisurl = 资源[0].url
var 当前网站=资源[0]
var myhtml
//导航数据 json 结构[{type_id:1,type_pid:0,type_name:"名"},{。。。}]
var 导航数据=[]
var mytype=当前网站.type

function 图片卡代码_bak(vod_id, vod_name, vod_class, vod_pic, vod_content, host) {
  if (host === undefined) { host = thisurl }
  let h = `
      <!-- 单张卡片 -->
    <div class="col">
        <div class="card h-100">
          <a href="详情页.html?host=${host}&vid=${vod_id}" target="_blank"><img src="${vod_pic}" class="card-img-top" alt="${vod_name}"></a>
            <div class="card-body">
              <p class="card-text">${vod_class}</p>
              <!-- <p class="card-text">${vod_content}</p> -->
            </div>
            <div class="card-footer">
              <a href="详情页.html?host=${host}&vid=${vod_id}" class="card-title btn" target="_blank"><h5 class="fw-bold">${vod_name}</h5></a>
            </div>
        </div>
    </div>
    `;
  return h;
}
function 图片卡代码(json) {
    lg(json)
    if($.type(json)!=='object'){return '<div class="col">图片卡代码数据错误！</div>'}
    let url=json.host || 当前网站.url
    let vid=json.vod_id
    let vpic=json.vod_pic
    let vname=json.vod_name
    let vtype=json.type_name || json.vod_class
    let vtime=json.vod_time
    let vcon=json.vod_content
    let h = `
        <!-- 单张卡片 -->
      <div class="col">
          <div class="card h-100">
            <a href="详情页.html?host=${url}&vid=${vid}" target="_blank"><img src="${vpic}" class="card-img-top" alt="${vname}"></a>
              <div class="card-body">
                <p class="card-text">${vtype}</p>
                <!-- <p class="card-text">${vcon}</p> -->
              </div>
              <div class="card-footer">
                <a href="详情页.html?host=${url}&vid=${vid}" class="card-title btn" target="_blank"><h5 class="fw-bold">${vname}</h5></a>
              </div>
          </div>
      </div>
      `;
    return h;
  }
function 文字卡代码_bak(type_name, vod_id, vod_name, vod_time, vod_remarks) {
  let hh = `<li class="list-group-item"><a class="text-decoration-none" href="详情页.html?host=${thisurl}&vid=${vod_id}" target="_blank">${vod_name} | ${type_name} | ${vod_time} </a></li>`
  return hh;
}
function 文字卡代码(json) {
    if($.type(json)!=='object'){return '<li class="list-group-item"><a class="text-decoration-none" href="#">文字卡数据错误</a></li>'}
    let url=当前网站.url
    let vid=json.vod_id
    let vname=json.vod_name
    let vtype=json.type_name || json.vod_class
    let vtime=json.vod_time
    let hh = `<li class="list-group-item"><a class="text-decoration-none" href="详情页.html?host=${url}&vid=${vid}" target="_blank">${vname} | ${vtype} | ${vtime} </a></li>`
    return hh;
  }

/**
 * 
 * @param {数字} id 生成大类的id 
 * @param {str} name 大类菜单名 
 * @returns 返回一段大类的html代码，方便用js插入导航
 */
function 大类代码(id, name) {
  let dalei = `       <li class="nav-item dropdown">
                          <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">${name}</a>
                          <ul id="dalei${id}" class="dropdown-menu" aria-labelledby="navbarDropdown">
                          </ul>
                      </li>`
  return dalei
}

/**
 * 
 * @param {*} id type_id，作为 类别被点击() 的参数
 * @param {*} name type_name，小类名称 
 * @returns 返回一段小类的html代码，方便用js插入导航
 */
function 小类代码(id, name) {
  let xiaolei = `<li><a class="dropdown-item" href="#" onclick="类别被点击(${id})">${name}</a></li>`
  return xiaolei
}

/**
 * 
 * @param {*} id type_id，作为 类别被点击() 的参数
 * @param {*} name type_name，小类名称 
 * @returns 返回一段大类的html代码，方便用js插入导航的第一层
 */
function 无小类代码(id, name) {
  let wuxiaolei = `<li class="nav-item"><a class="nav-link " aria-current="page" href="#" onclick="类别被点击(${id})">${name}</a></li>`
  return wuxiaolei
}


//--------------------------------  首页开始 --------------------------------

/**
 * 根据url读取网站首页代码，处理后‘添加导航’、‘添加展示’
 * @param {number} key 当前网站有urlkey项，则使用key序号取项值并组成访问链接
 * @return 返回网页源码
 */
function 取网页源码(){
    lg('取网页源码开始：')
    if(当前网站.urlkey!=='undefined'){
        var myurl=当前网站.url
    }else{
        var params = new URLSearchParams(当前网站.urlkey[key])
        var myurl=当前网站.url+'?'+params
    }
    lg('取网页源码——访问首页地址:'+myurl)
    $.get(myurl, function (data, status) {
        lg('访问状态:'+status)
        if (status !== "success") {
            alert("网址访问失败！换个网站吧！")
            return ''
        } else {
            //jquery get 是异步调用，不能返回data，要直接处理
            var dhsj=取导航数据(data)
            添加导航(dhsj)
            var zssj=取展示数据(data)
            //lg(zssj)
            添加展示(zssj, 1)
        }
    })
}

/**
 * 根据源码返回导航数据对象
 * @returns 返回导航数据对象 json 结构[{type_id:1,type_pid:0,type_name:"名"},{。。。}]
 */
function 取导航数据(data) {
    //导航数据 json 结构[{type_id:1,type_pid:0,type_name:"名"},{。。。}]
    let dh = []
    //对于json网站 导航规则是导航列表的“项名” 如果不填“项名”默认“class”
    let dhgz=当前网站.导航规则 || 'class'
    lg("导航规则："+dhgz)
    let mytype=当前网站.type
    if (mytype === 'json') {
        //json 数据   
        var json = JSON.parse(data)
        return json[dhgz]  
    } 
    if(mytype==='xml') {
        //XML 数据
        //导航规则:'class ty;&&id;&&pid;&&Text',
        var gzs = dhgz.split(';')
        var list = $(data).find(gzs[0])
        //lg(list)
        for (let i = 0; i < list.length; i++) {
            dh.push({
                'type_id': 取字符串_规则(list[i],gzs[1]),
                'type_pid': 取字符串_规则(list[i],gzs[2]),
                'type_name': 取字符串_规则(list[i],gzs[3])
            })
        }
        return dh
    }
    return dh
}

//将json对象数组添加到网页导航出上
//没有PID的 使用单层导航
//有PID 没有子项的 大类可点击
//有PID 有子项的 使用双层导航
/**
 * @param {json 对象数组} json 结构[{type_id:1,type_pid:0,type_name:"名"},{。。。}]
 */
function 添加导航(json) {
    lg('添加导航开始：')
    //------------------没有PID 类别直接显示在导航上------------------------
    lg('类别总个数：'+json.length)
    let 无PID = json.filter(function (it) {
        return it.type_pid === undefined
    })
    无PID.forEach(it => {
        $("#dalei").append(无小类代码(it.type_id, it.type_name))
    })
    lg('无PID分类个数：'+无PID.length)
    // ------------------大类PID=0 有小类----------------------------------

    let 大类 = json.filter(function (it) {
        return it.type_pid === 0
    })
    lg('大类个数：'+大类.length)
    //let 无子类 = []
    大类.forEach(it => {
        //子类是单个大类的所有子类集合  pid=上级type_id
        let 子类 = json.filter(function (t) { return t.type_pid === it.type_id })
        if (子类.length > 0) {
            //有子类 先加大类
            let dldm=大类代码(it.type_id, it.type_name)
            //lg(dldm)
            $("#dalei").append(dldm)

            //再加子类
            子类.forEach(zit => {
                $("#dalei" + it.type_id).append(小类代码(zit.type_id, zit.type_name))
            })
        } else {
            //无子类
            $("#dalei").append(无小类代码(it.type_id, it.type_name))
        }
    })
}


function 取展示数据(data) {
    //导航数据 json 结构[{type_id:1,type_pid:0,type_name:"名"},{。。。}]
    let zs = []
    //对于json网站 导航规则是导航列表的“项名” 如果不填“项名”默认“class”
    let zsgz=当前网站.展示规则
    lg("展示规则："+zsgz)
    let mytype=当前网站.type
    if (mytype === 'json') {
        var json = JSON.parse(data)
        if(zsgz!== undefined || zsgz!==''){
            return  json.list
        }else{
            return json[zsgz]   
        }
    } 
    if(mytype==='xml') {
        //XML 数据
         //展示规则：it.vod_id, it.vod_name, it.vod_class, it.vod_pic, it.vod_content, it.vod_time
         data=data.replace(/<!\[CDATA\[(.*?)\]\]>/gi,'$1')
        var gzs = zsgz.split(';')
        var list = $(data).find(gzs[0])
        for (let i = 0; i < list.length; i++) {
            zs.push({
                'vod_id': 取字符串_规则(list[i],gzs[1]),
                'vod_name': 取字符串_规则(list[i],gzs[2]),
                'vod_class': 取字符串_规则(list[i],gzs[3]),
                'vod_pic': 取字符串_规则(list[i],gzs[4]),
                'vod_content': 取字符串_规则(list[i],gzs[5]),
                'vod_time': 取字符串_规则(list[i],gzs[6])
            })
        }
        return zs
    }
    return zs
}

/**
 * 
 * @param {对象数组} json 影片数据对象数组
 * @param {*} type 0 有图  1 无图
 * @param {*} host 当前数据的访问地址
 */
function 添加展示(json, type=0) {
    //type=0 卡片 有图
    lg('添加展示开始，展示类型：'+type)
    
    if (type === 0) {
      json.forEach(it => {
        $("#cards").append(图片卡代码(it))
      })
    }
    //type=1 文字卡片 无图
    if (type === 1) {
      json.forEach((it, i) => {
        let ii = i % 2
        $("#txt" + ii).append(文字卡代码(it))
      })
    }
  }

//--------------------------------  首页结束 --------------------------------

//--------------------------------  栏目点击类函数 开始 --------------------------------

//小类被点击时 显示小类内容
/**
 * @param {*} typeid    访问链接 type_id 部分
 * @param {*} page      访问链接 pg 部分
 */
function 类别被点击(typeid, page = 1) {
    清理页面_无导航()
    //当前网站.urlkey[1] 0 是首页链接参数 1 是展示页链接参数 2 是详情页链接参数
    //***********如果属性名不是默认的会报错***********
    let myurlkey={}
    myurlkey.ac='videolist'
    myurlkey.t=typeid
    myurlkey.pg=page
    /* 
    myurlkey.ac=当前网站.urlkey[1].ac || 'videolist'
    myurlkey.t=当前网站.urlkey[1].t || typeid
    myurlkey.pg=当前网站.urlkey[1].pg || page
    */
    /* 不能直接用变量，会间接修改原变量
    let urlkey
    if (当前网站.urlkey == undefined) { urlkey = { ac: 'videolist', t: 'h_tid', pg: 'h_page' };}
    else { urlkey = 当前网站.urlkey[1] }
    let tid_name = 取属性名(urlkey, 'h_tid')
    let pg_name = 取属性名(urlkey, 'h_page')
    urlkey[tid_name] = typeid
    lg('tid_name:'+tid_name+'typeid:'+typeid)
    urlkey[pg_name] = page
    */
    let url = 当前网站.url
    let type = 当前网站.type
    let key = 当前网站.展示规则 || 'list'

    lg('分类点击访问地址:' + url)
    lg(myurlkey)

    $.get(url, myurlkey, function (data, status) {
        if (status !== "success") {
            alert("网址访问失败！换个网站吧！")
        } else {
            if (type === 'json') {
                //获取到的数据是json
                var classjson = JSON.parse(data)
                添加展示(classjson[key], 0)
                添加分页(typeid, classjson.page, classjson.pagecount)
            }
            if (type === 'xml') {
                //获取到的XML
                var cjson = []
                cjson = 取展示数据(data)
                lg(cjson)
                添加展示(cjson, 0)
                添加分页(typeid, $(data).find('list').attr('page'), $(data).find('list').attr('pagecount'))
            }
        }
    })
}
//--------------------------------  栏目点击结束 --------------------------------


//读取首页地址代码，json格式，直接添加导航
//wz 是网站的数据对象
function 取首页(wz) {
    //根据URL取得json网站中的影片类型列表
    if(wz.urlkey!=='undefined'){
        var myurl=wz.url
    }else{
        var params = new URLSearchParams(wz.urlkey[0])
        var myurl=wz.url+'?'+params
    }

    lg('访问首页地址:'+myurl)
    $.get(myurl, function (data, status) {
        if (status !== "success") {
            alert("网址访问失败！换个网站吧！")
        } else {
            if (当前网站.type === 'json') {
                var classjson = JSON.parse(data)
                清理页面()
                $("#xinxi").html("本类共有作品：" + classjson.total)
                添加导航(classjson.class)
                //添加分页(0,classjson.page,classjson.total)
                //一般都有推荐 在这也加上 不过推荐可能没图片
                添加展示(classjson.list, 1)
            }
            if (当前网站.type === 'xml') {
                var classjson = JSON.parse(data)
                清理页面()
                $("#xinxi").html("本类共有作品：" + classjson.total)
                添加导航(classjson.class)
                //添加分页(0,classjson.page,classjson.total)
                //一般都有推荐 在这也加上 不过推荐可能没图片
                添加展示(classjson.list, 1)
            }
        }
    })
}

function 取首页xml(url) {
  //根据URL取得json网站中的影片类型列表
  $.get(url, function (data, status) {
    if (status !== "success") {
      alert("网址访问失败！换个网站吧！")
    } else {
      /*
      var classjson = JSON.parse(data)
      $("#dalei").empty()
      $("#xinxi").html("本类共有作品：" + classjson.total)
      */
      //xmltojson(data)
     var list=$(data).find('class ty')
     var classjson=[]
     
     for (let i = 0; i< list.length; i++) {
      classjson.push({
        'type_id':$(list[i]).attr('id'),
        'type_name':$(list[i]).text(),
        'type_pid':$(list[i]).attr('pid')
      })

     }
     //console.log($(list[0]).attr('id'))
     /*
     var classjson=[]
     list.forEach(it=>{
      classjson.push({
        'type_id':$(it).attr('id'),
        'type_name':$(it).text(),
        'type_pid':''
      })
     })
     */
     //console.log(classjson)
     
      添加导航(classjson)
      //添加分页(0,classjson.page,classjson.total)
      //一般都有推荐 在这也加上 不过推荐可能没图片
      //添加展示(classjson.list, 1)
    }
  })
}

function 规则取导航(html){
//json源数据格式 {type_id,type_name,type_pid,type_url}
    var d=[]
    var json={}
    var gzs=wangzhan.gz_daohang.split(';')
    var list=$(html).find(gzs[0])
    gzs.forEach(it => {
      if(it.includes('&&')){}
    });
    lg(list)
    let it=list.find("a") //it 是一个对象数组
    lg(it[0].text)
    lg(it[0].attributes.href)
    return json

}

function 取字符串_规则(str,gz){
    //lg(str)
    //str=str.replace("<!--[CDATA[","")
    //str=str.replace("]]-->","")
    //规则  jquery选择器&&[Text | Html | 属性名 | 正则表达式]
    // gz=''  返回 $(str).text()
    // gz='xxx' 返回 return $(str).find(xxx).text()
    // gz='xxx&&' 返回 return $(str).find(xxx).text()
    // gz='xxx&&Text' 返回 return $(str).find(xxx).text()
    // gz='xxx&&Html' 返回 return $(str).find(xxx).html()
    // gz='xxx&&aaa' 返回 return $(str).find(xxx).attr(aaa)
    // gz='&&' 返回 return ""
    // gz='&&Text' 返回 return $(str).text()
    // gz='&&Html' 返回 return $(str).html()
    // gz='&&aaa' 返回 return $(str).attr(aaa)
    if(!gz.includes('&&')){
        //不含 && 直接返回 text() 值
        if(gz===''){
            //选择器为空
            return $(str).text()
        }else{
            //有选择器
            return $(str).find(gz).text()
        }
    }else{
        //规则中有 &&
        //gz='&&[Text | Html | 属性名 | 正则表达式]' 返回  $(str).attr(gzs[1]);
        //gz='xxx&&[Text | Html | 属性名 | 正则表达式]' 返回  $(str).find(gzs[0]).attr(gzs[1]);
        let gzs = gz.split('&&')
        if(gzs[0]===''){
            //选择器为空
            if(gzs[1]===''){return "";}
            if(gzs[1]==='Text'){return $(str).text();}
            if(gzs[1]==='Html'){return $(str).html();}
            return $(str).attr(gzs[1]);
            // ------------正则不知道怎么写----------------
        }else{
            //有选择器
            if(gzs[1]==='Text' || gzs[1]===''){return $(str).find(gzs[0]).text();}
            if(gzs[1]==='Html'){return $(str).find(gzs[0]).html();}
            return $(str).find(gzs[0]).attr(gzs[1]);
        }
    }
    
    var rt
    if(gzs.length===1){}
    if (gz === '') {
        let tname = $(str).attr(gz)
    } else {
        if (gz === 'Text') {
            let tname = $(str).find(gz).text()
        } else {
            let tname = $(str).find(gz).attr(gz3[1])
        }
    }
    return rt
}

/**
 * 
 * @param {*} typeid 当前 type_id，用于 类别被点击()
 * @param {*} page 要显示的页码
 * @param {*} total 数据中总页数
 */
function 添加分页(typeid, page, total) {
  lg("添加分页开始")
  let p = Number(page)
  $("#fenye").empty()
  //首页
  $("#fenye").append(`<li class="page-item"><a class="page-link" href="#" onclick="类别被点击(${typeid},1)" >首页</a></li>`)
  //上一页
  if (p - 1 > 0) { $("#fenye").append(`<li class="page-item"><a class="page-link" href="#" onclick="类别被点击(${typeid},${p - 1})">上一页</a></li>`) }
  //前三页
  if (p - 3 > 0) { $("#fenye").append(`<li class="page-item"><a class="page-link" href="#" onclick="类别被点击(${typeid},${p - 3})">${p - 3}</a></li>`) }
  if (p - 2 > 0) { $("#fenye").append(`<li class="page-item"><a class="page-link" href="#" onclick="类别被点击(${typeid},${p - 2})">${p - 2}</a></li>`) }
  if (p - 1 > 0) { $("#fenye").append(`<li class="page-item"><a class="page-link" href="#" onclick="类别被点击(${typeid},${p - 1})">${p - 1}</a></li>`) }
  //当前页
  $("#fenye").append('<li class="page-item"><a class="page-link" href="#" >当前</a></li>')
  //后三页
  if (p + 1 <= total) { $("#fenye").append(`<li class="page-item"><a class="page-link" href="#" onclick="类别被点击(${typeid},${p + 1})">${p + 1}</a></li>`) }
  if (p + 2 <= total) { $("#fenye").append(`<li class="page-item"><a class="page-link" href="#" onclick="类别被点击(${typeid},${p + 2})">${p + 2}</a></li>`) }
  if (p + 3 <= total) { $("#fenye").append(`<li class="page-item"><a class="page-link" href="#" onclick="类别被点击(${typeid},${p + 3})">${p + 3}</a></li>`) }
  //下一页
  if (p + 1 <= total) { $("#fenye").append(`<li class="page-item"><a class="page-link" href="#" onclick="类别被点击(${typeid},${p + 1})">下一页</a></li>`) }
  //尾页
  $("#fenye").append(`<li class="page-item"><a class="page-link" href="#" onclick="类别被点击(${typeid},${total})">尾页</a></li>`)
}


/**
 * 
 * @param {str} skey 搜索关键字
 * @param {地址数组} urls 搜索数组中所有网站
 */
function 全站搜索(skey, urls) {
  //urls 是一个数组，搜索数组中所有网站
  $("#cards").empty()
  urls.forEach(u => {
    let surl = u + "?ac=videolist&wd=" + skey
    $.get(surl, function (data, status) {
      if (status !== "success") {
        alert("搜索网址访问失败！换个网站吧！")
      } else {
        var classjson = JSON.parse(data)
        lg(u)
        添加展示(classjson.list, 0, u)
        //添加分页(typeid,classjson.page,classjson.pagecount)
      }
    })
  })
}

/**
 * 
 * @param {str} skey 搜索关键词 
 * @param {str} urls 搜索地址字符串，用于搜索当前网站。
 */
function 搜索(skey, urls) {
  if (urls === undefined) {
    //搜索当前网站
    let surl = thisurl + "?ac=videolist&wd=" + skey
    $.get(surl, function (data, status) {
      if (status !== "success") {
        alert("搜索网址访问失败！换个网站吧！")
      } else {
        var classjson = JSON.parse(data)
        lg(classjson)
        添加展示(classjson.list, 0)
        //添加分页(typeid,classjson.page,classjson.pagecount)
      }
    })
  }
  if (typeof urls === "string") {
    //搜索特定网站
    let surl = urls + "?ac=videolist&wd=" + skey
    $.get(surl, function (data, status) {
      if (status !== "success") {
        alert("搜索网址访问失败！换个网站吧！")
      } else {
        var classjson = JSON.parse(data)
        lg(classjson)
        添加展示(classjson.list, 0)
        //添加分页(typeid,classjson.page,classjson.pagecount)
      }
    })
  }
}


function 显示收藏() {
  var shoucang = JSON.parse(localStorage.getItem("shoucang"));
  lg(shoucang)
  if(shoucang!=null){
  shoucang.forEach(it => {
    
    $("#shoucang").append(图片卡代码(it))
  })
}
}


//------------------------------- 辅助函数 --------------------------------

/**
 * 根据url链接在‘资源’数组数据中查找对应网站数据
 * @param {str} url链接 
 * @returns 返回资源数组中url项等于输入url的网站数据
 */
function 取点击网站(url){
    var rt={}
    资源.forEach(it=>{
        //lg(url===it.url)
        if(url===it.url){
            rt=it
        }
    })
    return rt
}
function 清理页面() {
    $("#dalei").empty()
    $("#fenye").empty()
    $("#cards").empty()
    $("#txt0").empty()
    $("#txt1").empty()
    $("#shoucang").empty()
}
function 清理页面_无导航() {
    $("#fenye").empty()
    $("#cards").empty()
    $("#txt0").empty()
    $("#txt1").empty()
    $("#shoucang").empty()
}

/**
 * 根据对象的属性值取回该值对应的属性名
 * @param {*} obj 被操作对象
 * @param {*} str 属性值
 * @returns 
 */
function 取属性名(obj,str){
    for (var x in obj) {
        //lg('属性名：'+x+' - '+obj[x]+' - '+str)
        //lg(obj[x]===str)
        if(obj[x]===str){return x}
      }
      return ''
}
//----------------/////////////  程序开始  /////////////----------------------//
var wangzhan={}

$(document).ready(function () {
lg('JS开始')
    // 取资源网站首页源码，添加导航，添加展示（添加分页）
    //取首页(当前网站)
    // 在首页推荐下面显示收藏
    localStorage.setItem("当前网站", JSON.stringify(当前网站));
    取网页源码();
    显示收藏();
    /*
    myhtml=取网页源码()
    lg(取网页源码())
    if(myhtml===''){
        alert('取网页源码失败！网址：'+当前网站.url)
    }else{
        清理页面();
        lg(myhtml)
        var dh=取导航数据();
        lg(dh)
        //添加导航()
        //显示导航();
        //显示列表();
        //显示收藏();
        //显示分页();
    }
    */

    // -----------------------绑定侧边栏下拉菜单点击事件  切换网站用
    // 根据资源站数据添加下拉菜单
    资源.forEach(it => {
        if(it.type==='json'){
            $("#jsonzhan").append('<li><a class="dropdown-item" href="'+it.url+'">' + it.name + '</a></li>')
        }
        if(it.type==='zhua'){
            $("#zhuazhan").append('<li><a class="dropdown-item" href="'+it.url+'" target="_blank">' + it.name + '</a></li>')
        }
        if(it.type==='xml'){
            $("#xmlzhan").append('<li><a class="dropdown-item" href="'+it.url+'">' + it.name + '</a></li>')
        }
    });

    // json 网站
    $("#jsonzhan").on('click', '.dropdown-item', function () {
        thisurl = $(this).attr('href')
        let wz=取点击网站(thisurl)
        当前网站=wz
        localStorage.setItem("当前网站", JSON.stringify(wz));
        清理页面()
        取网页源码()
        return false;
    });

    //XML 网站
    $("#xmlzhan").on('click', '.dropdown-item', function () {
      thisurl = $(this).attr('href')
      let wz=取点击网站(thisurl)
      当前网站=wz
      localStorage.setItem("当前网站", JSON.stringify(wz));
      清理页面()
      取网页源码()
      return false;
    });


  // zhua 网址
  //网站直接点击跳转就行，先不做处理。

    /*
    $("#zhuazhan").on('click', '.dropdown-item', function () {
        wangzhan=资源.find(wz => wz.url === $(this).attr('href'))
        lg(wangzhan)
        thisurl = wangzhan.url
        清理页面()
        取首页zhua(thisurl)
        //显示收藏()
        return false;
    });
*/
    // ---------------------- 绑定收缩按钮 ------------------------
  //搜索本站
  $("#sbtn1").on('click', function () {
    //alert($("#skey").val())
    搜索($("#skey").val())
  });

  //搜索全站
  $("#sbtn2").on('click', function () {
    //alert($("#skey").val())
    全站搜索($("#skey").val(), ziyuan)
  });
});



/*
1、 确定一个框架，要与数据无关，全部用一种数据格式来体现，和海阔一样
2、导航的数据处理：
    从网页抓取的：链接是相对或绝对的链接地址
    从JSON或XML得到的：是id或数字，需要结合特定链接才能组成访问链接
    导航数据 json格式：使用json源数据格式 {type_id,type_name,type_pid,type_url}
3、 程序操作逻辑：
    一共四个页面：首页（一级），展示页（二级），详情页（三级），跳转到播放
    
    【首页】一级
    1）读首页源码（网站首页地址 it.host）
    2）获取导航（首页源码，it.导航规则，返回：导航json{type_id,type_name,type_pid,type_url}）
    3）显示导航（导航json{type_id,type_name,type_pid,type_url}）
        - 点击跳转到【展示页】
    4）获取推荐（首页源码，it.推荐规则，返回：推荐json{列表，标题，图片，描述，链接，样式}）
    5）显示推荐（推荐json{列表，标题，图片，描述，链接，样式}）
        A、点击跳转到【详情页】  B、跳转到直接播放
    6）显示其他信息（）
    
    【展示页】二级
    1）读展示页源码（首页导航给出的地址）
    2）显示导航（导航json{type_id,type_name,type_pid,type_url}） //从上一页获取的 可以用变量
        - 点击跳转到【展示页】
    4）获取展示（地址或页面源码，it.展示规则，返回：展示json{列表，标题，图片，描述，链接，样式}）
    5）显示展示（展示json{列表，标题，图片，描述，链接，样式}）
        A、点击跳转到【详情页】  B、跳转到直接播放
    6）显示其他信息（）
    
    【详情页】三级
    1）读详情页源码（展示页或推荐点击地址）
    2）显示导航（导航json{type_id,type_name,type_pid,type_url}） //从上一页获取的 可以用变量
        - 点击跳转到【展示页】
    4）获取详情（地址或页面源码，it.详情规则，返回：详情json{图片，标题，附加信息，播放列表，标题，链接}）
    5）显示展示（详情json{图片，标题，附加信息，播放列表，标题，链接}）
        - 跳转到直接播放
    6）显示其他信息（）
*/
function isJSON(str) {
  if (typeof str == 'string') {
      try {
          var obj=JSON.parse(str);
          if(typeof obj == 'object' && obj ){
              return true;
          }else{
              return false;
          }

      } catch(e) {
          console.log('error：'+str+'!!!'+e.message);
          return false;
      }
  }
  console.log('It is not a string!')
}


/**
 * 
 * @param {*} str 规则字符串
 * @param {*} type 
 * return {string} 返回规则字符串数组
 */
function 规则转换_HikerToJquery(str){
  //hiker规则都是 列表；标题；图片；描述；链接；样式}
    var gzs=str.split(';')
    gzs.forEach(it=>{
      //单个规则中包含&&
      // body&&li  .main&&ul,1&&li a&&Text img&&src
      if(it.includes('&&')){
        let g=it.split('&&')

      }
    })
}

//changes xml to json
function xmltojson(xml) {
  // Create the return object    
  var obj = {};
  if (xml.nodeType == 1) {
    // element        
    // do attributes        
    if (xml.attributes.length > 0) {
      obj["@attributes"] = {};
      for (var j = 0; j < xml.attributes.length; j++) {
        var attribute = xml.attributes.item(j);
        obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
      }
    }
  } else if (xml.nodeType == 3) {
    // text        
    obj = xml.nodeValue;
  }
  // do children    
  if (xml.hasChildNodes()) {
    for (var i = 0; i < xml.childNodes.length; i++) {
      var item = xml.childNodes.item(i);
      var nodeName = item.nodeName;
      if (typeof (obj[nodeName]) == "undefined") {
        obj[nodeName] = xmlToJson(item);
      } else {
        if (typeof (obj[nodeName].length) == "undefined") {
          var old = obj[nodeName];
          obj[nodeName] = [];
          obj[nodeName].push(old);
        }
        obj[nodeName].push(xmlToJson(item));
      }
    }
  } return obj;
}